''========================================================
'' Autor: 		Luis Antonio Lara Capetillo
'' Fecha Creación: 	23/11/2012
'' Descripcion: 	Clase Componente ctlFUGridPersonal
''========================================================

Public Class ctlFUGridPersonal

  Inherits System.Web.UI.UserControl
  Public Event cbxNidTipoPersonalClicked As EventHandler
  Public Event cbxNidTipoAccesoClicked As EventHandler

  Dim tablaAuxiliar As New DataTable
  Public Event btnNidTipoPersonalClicked As EventHandler

#Region "Propiedades"
  ''' <summary>
  ''' Obtiene el nid de la opcion seleccionada
  ''' </summary>
  ''' <value></value>
  ''' <returns>numero de nid seleccionado</returns>
  ''' <remarks></remarks>
  Public ReadOnly Property NidcbxNidTipoPersonal() As Int32
    Get
      If cbxNidTipoPersonal.SelectedValue = "- Seleccione una opcion -" Then
        Return 0
      Else
        Return CInt(cbxNidTipoPersonal.SelectedValue)
      End If
    End Get
  End Property
  ''' <summary>
  ''' Obtiene el nombre de la opcion seleccionada
  ''' </summary>
  ''' <value></value>
  ''' <returns>nombre de la opcion seleccionada</returns>
  ''' <remarks></remarks>
  Public ReadOnly Property NombrecbxNidTipoPersonal() As String
    Get
      If cbxNidTipoPersonal.SelectedItem.Text = "- Seleccione una opcion -" Then
        Return ""
      Else
        Return cbxNidTipoPersonal.SelectedItem.Text
      End If
    End Get
  End Property

  ''' <summary>
  ''' Obtiene el nid de la opcion seleccionada
  ''' </summary>
  ''' <value></value>
  ''' <returns>numero de nid seleccionado</returns>
  ''' <remarks></remarks>
  Public ReadOnly Property NidcbxNidTipoAcceso() As Int32
    Get
      If cbxNidTipoAcceso.SelectedValue = "- Seleccione una opcion -" Then
        Return 0
      Else
        Return CInt(cbxNidTipoAcceso.SelectedValue)
      End If
    End Get
  End Property
  ''' <summary>
  ''' Obtiene el nombre de la opcion seleccionada
  ''' </summary>
  ''' <value></value>
  ''' <returns>nombre de la opcion seleccionada</returns>
  ''' <remarks></remarks>
  Public ReadOnly Property NombrecbxNidTipoAcceso() As String
    Get
      If cbxNidTipoAcceso.SelectedItem.Text = "- Seleccione una opcion -" Then
        Return ""
      Else
        Return cbxNidTipoAcceso.SelectedItem.Text
      End If
    End Get
  End Property

  ''' <summary>
  ''' Obtiene o estable el valor Nombre del TextBox txtNombre
  ''' </summary>
  ''' <value>valor tipo String</value>
  ''' <returns>valor tipo String</returns>
  ''' <remarks></remarks>
  Public Property Nombre() As String
    Get
      Return Me.txtNombre.Text
    End Get
    Set(value As String)
      Me.txtNombre.Text = value
    End Set
  End Property

  ''' <summary>
  ''' Obtiene o estable el valor ApellidoPat del TextBox txtApellidoPat
  ''' </summary>
  ''' <value>valor tipo String</value>
  ''' <returns>valor tipo String</returns>
  ''' <remarks></remarks>
  Public Property ApellidoPat() As String
    Get
      Return Me.txtApellidoPat.Text
    End Get
    Set(value As String)
      Me.txtApellidoPat.Text = value
    End Set
  End Property

  ''' <summary>
  ''' Obtiene o estable el valor ApellidoMat del TextBox txtApellidoMat
  ''' </summary>
  ''' <value>valor tipo String</value>
  ''' <returns>valor tipo String</returns>
  ''' <remarks></remarks>
  Public Property ApellidoMat() As String
    Get
      Return Me.txtApellidoMat.Text
    End Get
    Set(value As String)
      Me.txtApellidoMat.Text = value
    End Set
  End Property

  ''' <summary>
  ''' Obtiene o estable el valor RFC del TextBox txtRFC
  ''' </summary>
  ''' <value>valor tipo String</value>
  ''' <returns>valor tipo String</returns>
  ''' <remarks></remarks>
  Public Property RFC() As String
    Get
      Return Me.txtRFC.Text
    End Get
    Set(value As String)
      Me.txtRFC.Text = value
    End Set
  End Property

  ''' <summary>
  ''' Obtiene o estable el valor CURP del TextBox txtCURP
  ''' </summary>
  ''' <value>valor tipo String</value>
  ''' <returns>valor tipo String</returns>
  ''' <remarks></remarks>
  Public Property CURP() As String
    Get
      Return Me.txtCURP.Text
    End Get
    Set(value As String)
      Me.txtCURP.Text = value
    End Set
  End Property

  ''' <summary>
  ''' Obtiene o estable el valor NSS del TextBox txtNSS
  ''' </summary>
  ''' <value>valor tipo String</value>
  ''' <returns>valor tipo String</returns>
  ''' <remarks></remarks>
  Public Property NSS() As String
    Get
      Return Me.txtNSS.Text
    End Get
    Set(value As String)
      Me.txtNSS.Text = value
    End Set
  End Property

  ''' <summary>
  ''' Obtiene o establece el valor Fecha_Nacimiento del TextBox txtFecha_Nacimiento
  ''' </summary>
  ''' <value>valor tipo String</value>
  ''' <returns>valor tipo String</returns>
  ''' <remarks></remarks>
  Public Property Fecha_Nacimiento() As String
    Get
      Return Me.txtFecha_Nacimiento.Text
    End Get
    Set(value As String)
      Me.txtFecha_Nacimiento.Text = value
    End Set
  End Property

  ''' <summary>
  ''' Obtiene o estable el valor Folio del TextBox txtFolio
  ''' </summary>
  ''' <value>valor tipo String</value>
  ''' <returns>valor tipo String</returns>
  ''' <remarks></remarks>
  Public Property Folio() As String
    Get
      Return Me.txtFolio.Text
    End Get
    Set(value As String)
      Me.txtFolio.Text = value
    End Set
  End Property

  ''' <summary>
  ''' Obtiene o estable el valor Credencial del TextBox txtCredencial
  ''' </summary>
  ''' <value>valor tipo String</value>
  ''' <returns>valor tipo String</returns>
  ''' <remarks></remarks>
  Public Property Credencial() As String
    Get
      Return Me.txtCredencial.Text
    End Get
    Set(value As String)
      Me.txtCredencial.Text = value
    End Set
  End Property

  ''' <summary>
  ''' Obtiene la tabla con la informacion del gridview
  ''' </summary>
  ''' <value></value>
  ''' <returns></returns>
  ''' <remarks></remarks>
  Public ReadOnly Property TablaDatos() As DataTable
    Get
      ObtenerFilasAgregadas()
      Return tablaAuxiliar
    End Get
  End Property

  ''' <summary>
  ''' Habilita o Desabilita el Control para Edicion
  ''' </summary>
  ''' <value>True o False</value>
  ''' <remarks></remarks>
  Public WriteOnly Property Enabled() As Boolean
    Set(value As Boolean)
	  cbxNidTipoPersonal.Enabled=value
      cbxNidTipoAcceso.Enabled=value
      txtNombre.Enabled=value
      txtApellidoPat.Enabled=value
      txtApellidoMat.Enabled=value
      txtRFC.Enabled=value
      txtCURP.Enabled=value
      txtNSS.Enabled=value
      txtFecha_Nacimiento.Enabled=value
      txtFolio.Enabled=value
      txtCredencial.Enabled=value
      gdvNid.Enabled=value
      btnNidTipoPersonal.Enabled=value
      
    End Set
  End Property

  ''' <summary>
  ''' Habilita o Desabilita el Control para solo lectura
  ''' </summary>
  ''' <value>True o False</value>
  ''' <remarks>ReadOnly</remarks>
  Public WriteOnly Property Lectura() As Boolean
    Set(value As Boolean)
	  cbxNidTipoPersonal.ReadOnly=value
      cbxNidTipoAcceso.ReadOnly=value
      txtNombre.ReadOnly=value
      txtApellidoPat.ReadOnly=value
      txtApellidoMat.ReadOnly=value
      txtRFC.ReadOnly=value
      txtCURP.ReadOnly=value
      txtNSS.ReadOnly=value
      txtFecha_Nacimiento.ReadOnly=value
      txtFolio.ReadOnly=value
      txtCredencial.ReadOnly=value
      gdvNid.ReadOnly=value
      btnNidTipoPersonal.ReadOnly=value
      
    End Set
  End Property


#End Region
#Region "Eventos"
  Protected Sub cbxNidTipoPersonal_SelectedIndexChanged(sender As Object, e As System.EventArgs) Handles cbxNidTipoPersonal.SelectedIndexChanged
    OncbxNidTipoPersonalClick(sender)
  End Sub

  Protected Sub cbxNidTipoAcceso_SelectedIndexChanged(sender As Object, e As System.EventArgs) Handles cbxNidTipoAcceso.SelectedIndexChanged
    OncbxNidTipoAccesoClick(sender)
  End Sub

  ''' <summary>
  ''' Evento que se genera cuando se da clic a cualquier boton del gdvNid
  ''' </summary>
  ''' <param name="sender"></param>
  ''' <param name="e"></param>
  ''' <remarks></remarks>
  Protected Sub gdvNid_RowCommand(sender As Object, e As System.Web.UI.WebControls.GridViewCommandEventArgs)
    Dim index As Integer
	index = Convert.ToInt32(e.CommandArgument)
    If e.CommandName = "Editar" Then
      'Codigo para editar
    End If
    If e.CommandName = "Copiar" Then
      'Codigo para Copiar
    End If
    If e.CommandName = "Eliminar" Then
      ObtenerFilasAgregadas()
      tablaAuxiliar.Rows(index).Delete()
      gdvDatos.DataSource = tablaAuxiliar
      gdvDatos.DataBind()
    End If
  End Sub
  ''' <summary>
  ''' Evento para ocultar valor en el gridview
  ''' </summary>
  ''' <param name="sender"></param>
  ''' <param name="e"></param>
  ''' <remarks></remarks>
  Protected Sub gdvNid_RowDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewRowEventArgs) Handles gdvNid.RowDataBound
    Try
      'Se ocultan las columnas que no se requiere ver pero conservar su valor
	  'ejemplo: e.Row.Cells(0).Visible = False
      
    Catch ex As Exception

    End Try
  End Sub

  Protected Sub btnNidTipoPersonal_Click(sender As Object, e As System.Web.UI.ImageClickEventArgs) Handles btnNidTipoPersonal.Click
    OnbtnNidTipoPersonalClick(sender)
  End Sub

#End Region
#Region "Metodos"
  Protected Overridable Sub OncbxNidTipoPersonalClick(ByVal sender As Object)
    RaiseEvent cbxNidTipoPersonalClicked(sender, New EventArgs)
  End Sub

  Protected Overridable Sub OncbxNidTipoAccesoClick(ByVal sender As Object)
    RaiseEvent cbxNidTipoAccesoClicked(sender, New EventArgs)
  End Sub

  ''' <summary>
  ''' Metodo para obtener las filas del GridView
  ''' </summary>
  ''' <remarks></remarks>
  Private Sub ObtenerFilasAgregadas()
    tablaAuxiliar = crearTabla()
    For i As Integer = 0 To gdvNid.Rows.Count - 1
      Dim NuevaFila As DataRow = tablaAuxiliar.NewRow()
	  ?TablaFila
      'ejemplo: NuevaFila("nombreColumna") = gdvDatos.Rows(i).Cells.Item(0).Text
      
      tablaAuxiliar.Rows.Add(NuevaFila)
    Next
  End Sub
  ''' <summary>
  ''' Metodo para crear una tabla con las columnas del gridView
  ''' </summary>
  ''' <returns></returns>
  ''' <remarks></remarks>
  Private Function crearTabla() As DataTable
    Dim tabla As New DataTable
    Dim Columna As DataColumn
	'Ejemplo:
    'Columna = New DataColumn()
    'Columna.DataType = System.Type.GetType("System.String")
    'Columna.ColumnName = "NIDEMBALAJE"
    'Columna.DefaultValue = ""
    'tabla.Columns.Add(Columna)
	?TablaColumnas
	
    Return tabla
  End Function

  Protected Overridable Sub OnbtnNidTipoPersonalClick(ByVal sender As Object)
    RaiseEvent btnNidTipoPersonalClicked(sender, New EventArgs)
  End Sub

  ''' <summary>
  ''' Metodo para asignar los datos al componente ctlTurismo
  ''' </summary>
  ''' <param name="tablaDatos">DataTable donde se obtienen los datos</param>
  ''' <remarks></remarks>
  Public Sub AsignarDatos(ByVal tablaDatos As DataTable)
    Me.txtNombre.Text= tablaDatos.Rows(0)("Nombre").ToString
    Me.txtApellidoPat.Text= tablaDatos.Rows(0)("ApellidoPat").ToString
    Me.txtApellidoMat.Text= tablaDatos.Rows(0)("ApellidoMat").ToString
    Me.txtRFC.Text= tablaDatos.Rows(0)("RFC").ToString
    Me.txtCURP.Text= tablaDatos.Rows(0)("CURP").ToString
    Me.txtNSS.Text= tablaDatos.Rows(0)("NSS").ToString
    Me.txtFecha_Nacimiento.Text= tablaDatos.Rows(0)("Fecha_Nacimiento").ToString
    Me.txtFolio.Text= tablaDatos.Rows(0)("Folio").ToString
    Me.txtCredencial.Text= tablaDatos.Rows(0)("Credencial").ToString
    
  End Sub

  ''' <summary>
  ''' Metodo para llenar cbxNidTipoPersonal con datos de un DataTable y seleciona el primero
  ''' </summary>
  ''' <param name="data"> Tabla con los datos</param>
  ''' <param name="nombre">Nombre de la columna de los nombres</param>
  ''' <param name="nid"> Nombre de la columna con los nid</param>
  ''' <remarks></remarks>
  Public Sub llenarcbxNidTipoPersonal(ByVal data As DataTable, ByVal nombre As String, ByVal nid As String)
    Me.cbxNidTipoPersonal.DataSource = data
    Me.cbxNidTipoPersonal.DataTextField = nombre.ToString
    Me.cbxNidTipoPersonal.DataValueField = nid.ToString
    Me.cbxNidTipoPersonal.DataBind()
    Me.cbxNidTipoPersonal.Items.Add("- Seleccione una opcion -")
    Me.cbxNidTipoPersonal.SelectedIndex = Me.cbxNidTipoPersonal.Items.Count - 1
  End Sub

 ''' <summary>
  ''' Metodo para llenar cbxNidTipoAcceso con datos de un DataTable y seleciona el primero
  ''' </summary>
  ''' <param name="data"> Tabla con los datos</param>
  ''' <param name="nombre">Nombre de la columna de los nombres</param>
  ''' <param name="nid"> Nombre de la columna con los nid</param>
  ''' <remarks></remarks>
  Public Sub llenarcbxNidTipoAcceso(ByVal data As DataTable, ByVal nombre As String, ByVal nid As String)
    Me.cbxNidTipoAcceso.DataSource = data
    Me.cbxNidTipoAcceso.DataTextField = nombre.ToString
    Me.cbxNidTipoAcceso.DataValueField = nid.ToString
    Me.cbxNidTipoAcceso.DataBind()
    Me.cbxNidTipoAcceso.Items.Add("- Seleccione una opcion -")
    Me.cbxNidTipoAcceso.SelectedIndex = Me.cbxNidTipoAcceso.Items.Count - 1
  End Sub

  ''' <summary>
  ''' Metodo para llenar el gdvNid con datos de la table
  ''' </summary>
  ''' <param name="tabla">tabla donde se obtienen los datos</param>
  ''' <remarks></remarks>
  Public Sub llenargdvNid(ByVal tabla As DataTable)
    Me.gdvNid.DataSource = tabla
    Me.gdvNid.DataBind()
  End Sub
  ''' <summary>
  ''' Metodo para Seleccionar la pagina de el gdvNid
  ''' </summary>
  ''' <param name="e">es un evento de tipo GridViewPageEventArgs</param>
  ''' <remarks></remarks>
  Public Sub SelecPagegdvNid(ByVal e As System.Web.UI.WebControls.GridViewPageEventArgs)
    Me.gdvNid.PageIndex = e.NewPageIndex
    Me.gdvNid.DataBind()
  End Sub


#End Region
End Class
